home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
PROGMISC
/
PCSSP.LZH
/
PC-SSP.ZIP
/
MATINSL.ZIP
/
MFSS.FOR
< prev
next >
Wrap
Text File
|
1985-11-29
|
7KB
|
244 lines
C
C ..................................................................
C
C SUBROUTINE MFSS
C
C PURPOSE
C GIVEN A SYMMETRIC POSITIVE SEMI DEFINITE MATRIX , MFSS WILL
C (1) DETERMINE THE RANK AND LINEARLY INDEPENDENT ROWS AND
C COLUMNS
C (2) FACTOR A SYMMETRIC SUBMATRIX OF MAXIMAL RANK
C (3) EXPRESS NONBASIC ROWS IN TERMS OF BASIC ONES,
C EXPRESS NONBASIC COLUMNS IN TERMS OF BASIC ONES
C EXPRESS BASIC VARIABLES IN TERMS OF FREE ONES
C SUBROUTINE MFSS MAY BE USED AS A PREPARATORY STEP FOR THE
C CALCULATION OF THE LEAST SQUARES SOLUTION OF MINIMAL
C LENGTH OF A SYSTEM OF LINEAR EQUATIONS WITH SYMMETRIC
C POSITIVE SEMI-DEFINITE COEFFICIENT MATRIX
C
C USAGE
C CALL MFSS(A,N,EPS,IRANK,TRAC)
C
C DESCRIPTION OF PARAMETERS
C A - UPPER TRIANGULAR PART OF GIVEN SYMMETRIC SEMI-
C DEFINITE MATRIX STORED COLUMNWISE IN COMPRESSED FORM
C ON RETURN A CONTAINS THE MATRIX T AND, IF IRANK IS
C LESS THAN N, THE MATRICES U AND TU
C N - DIMENSION OF GIVEN MATRIX A
C EPS - TESTVALUE FOR ZERO AFFECTED BY ROUND-OFF NOISE
C IRANK - RESULTANT VARIABLE, CONTAINING THE RANK OF GIVEN
C MATRIX A IF A IS SEMI-DEFINITE
C IRANK = 0 MEANS A HAS NO POSITIVE DIAGONAL ELEMENT
C AND/OR EPS IS NOT ABSOLUTELY LESS THAN ONE
C IRANK =-1 MEANS DIMENSION N IS NOT POSITIVE
C IRANK =-2 MEANS COMPLETE FAILURE, POSSIBLY DUE TO
C INADEQUATE RELATIVE TOLERANCE EPS
C TRAC - VECTOR OF DIMENSION N CONTAINING THE
C SOURCE INDEX OF THE I-TH PIVOT ROW IN ITS I-TH
C LOCATION, THIS MEANS THAT TRAC CONTAINS THE
C PRODUCT REPRESENTATION OF THE PERMUTATION WHICH
C IS APPLIED TO ROWS AND COLUMNS OF A IN TERMS OF
C TRANSPOSITIONS
C
C REMARKS
C EPS MUST BE ABSOLUTELY LESS THAN ONE. A SENSIBLE VALUE IS
C SOMEWHERE IN BETWEEN 10**(-4) AND 10**(-6)
C THE ABSOLUTE VALUE OF INPUT PARAMETER EPS IS USED AS
C RELATIVE TOLERANCE.
C IN ORDER TO PRESERVE SYMMETRY ONLY PIVOTING ALONG THE
C DIAGONAL IS BUILT IN.
C ALL PIVOTELEMENTS MUST BE GREATER THAN THE ABSOLUTE VALUE
C OF EPS TIMES ORIGINAL DIAGONAL ELEMENT
C OTHERWISE THEY ARE TREATED AS IF THEY WERE ZERO
C MATRIX A REMAINS UNCHANGED IF THE RESULTANT VALUE IRANK
C EQUALS ZERO
C
C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
C NONE
C
C METHOD
C THE SQUARE ROOT METHOD WITH DIAGONAL PIVOTING IS USED FOR
C CALCULATION OF THE RIGHT HAND TRIANGULAR FACTOR.
C IN CASE OF AN ONLY SEMI-DEFINITE MATRIX THE SUBROUTINE
C RETURNS THE IRANK X IRANK UPPER TRIANGULAR FACTOR T OF A
C SUBMATRIX OF MAXIMAL RANK, THE IRANK X (N-IRANK) MATRIX U
C AND THE (N-IRANK) X (N-IRANK) UPPER TRIANGULAR TU SUCH
C THAT TRANSPOSE(TU)*TU=I+TRANSPOSE(U)*U
C
C ..................................................................
C
SUBROUTINE MFSS(A,N,EPS,IRANK,TRAC)
C
C
C DIMENSIONED DUMMY VARIABLES
DIMENSION A(1),TRAC(1)
DOUBLE PRECISION SUM
C
C TEST OF SPECIFIED DIMENSION
IF(N)36,36,1
C
C INITIALIZE TRIANGULAR FACTORIZATION
1 IRANK=0
ISUB=0
KPIV=0
J=0
PIV=0.
C
C SEARCH FIRST PIVOT ELEMENT
DO 3 K=1,N
J=J+K
TRAC(K)=A(J)
IF(A(J)-PIV)3,3,2
2 PIV=A(J)
KSUB=J
KPIV=K
3 CONTINUE
C
C START LOOP OVER ALL ROWS OF A
DO 32 I=1,N
ISUB=ISUB+I
IM1=I-1
4 KMI=KPIV-I
IF(KMI)35,9,5
C
C PERFORM PARTIAL COLUMN INTERCHANGE
5 JI=KSUB-KMI
IDC=JI-ISUB
JJ=ISUB-IM1
DO 6 K=JJ,ISUB
KK=K+IDC
HOLD=A(K)
A(K)=A(KK)
6 A(KK)=HOLD
C
C PERFORM PARTIAL ROW INTERCHANGE
KK=KSUB
DO 7 K=KPIV,N
II=KK-KMI
HOLD=A(KK)
A(KK)=A(II)
A(II)=HOLD
7 KK=KK+K
C
C PERFORM REMAINING INTERCHANGE
JJ=KPIV-1
II=ISUB
DO 8 K=I,JJ
HOLD=A(II)
A(II)=A(JI)
A(JI)=HOLD
II=II+K
8 JI=JI+1
9 IF(IRANK)22,10,10
C
C RECORD INTERCHANGE IN TRANSPOSITION VECTOR
10 TRAC(KPIV)=TRAC(I)
TRAC(I)=KPIV
C
C MODIFY CURRENT PIVOT ROW
KK=IM1-IRANK
KMI=ISUB-KK
PIV=0.
IDC=IRANK+1
JI=ISUB-1
JK=KMI
JJ=ISUB-I
DO 19 K=I,N
SUM=0.D0
C
C BUILD UP SCALAR PRODUCT IF NECESSARY
IF(KK)13,13,11
11 DO 12 J=KMI,JI
SUM=SUM-A(J)*A(JK)
12 JK=JK+1
13 JJ=JJ+K
IF(K-I)14,14,16
14 SUM=A(ISUB)+SUM
C
C TEST RADICAND FOR LOSS OF SIGNIFICANCE
IF(SUM-ABS(A(ISUB)*EPS))20,20,15
15 A(ISUB)=DSQRT(SUM)
KPIV=I+1
GOTO 19
16 SUM=(A(JK)+SUM)/A(ISUB)
A(JK)=SUM
C
C SEARCH FOR NEXT PIVOT ROW
IF(A(JJ))19,19,17
17 TRAC(K)=TRAC(K)-SUM*SUM
HOLD=TRAC(K)/A(JJ)
IF(PIV-HOLD)18,19,19
18 PIV=HOLD
KPIV=K
KSUB=JJ
19 JK=JJ+IDC
GOTO 32
C
C CALCULATE MATRIX OF DEPENDENCIES U
20 IF(IRANK)21,21,37
21 IRANK=-1
GOTO 4
22 IRANK=IM1
II=ISUB-IRANK
JI=II
DO 26 K=1,IRANK
JI=JI-1
JK=ISUB-1
JJ=K-1
DO 26 J=I,N
IDC=IRANK
SUM=0.D0
KMI=JI
KK=JK
IF(JJ)25,25,23
23 DO 24 L=1,JJ
IDC=IDC-1
SUM=SUM-A(KMI)*A(KK)
KMI=KMI-IDC
24 KK=KK-1
25 A(KK)=(SUM+A(KK))/A(KMI)
26 JK=JK+J
C
C CALCULATE I+TRANSPOSE(U)*U
JJ=ISUB-I
PIV=0.
KK=ISUB-1
DO 31 K=I,N
JJ=JJ+K
IDC=0
DO 28 J=K,N
SUM=0.D0
KMI=JJ+IDC
DO 27 L=II,KK
JK=L+IDC
27 SUM=SUM+A(L)*A(JK)
A(KMI)=SUM
28 IDC=IDC+J
A(JJ)=A(JJ)+1.D0
TRAC(K)=A(JJ)
C
C SEARCH NEXT DIAGONAL ELEMENT
IF(PIV-A(JJ))29,30,30
29 KPIV=K
KSUB=JJ
PIV=A(JJ)
30 II=II+K
KK=KK+K
31 CONTINUE
GOTO 4
32 CONTINUE
33 IF(IRANK)35,34,35
34 IRANK=N
35 RETURN
C
C ERROR RETURNS
C
C RETURN IN CASE OF ILLEGAL DIMENSION
36 IRANK=-1
RETURN
C
C INSTABLE FACTORIZATION OF I+TRANSPOSE(U)*U
37 IRANK=-2
RETURN
END